// +----------------------------------------------------------------------+
// |                          Mailcertificado                             |
// +----------------------------------------------------------------------+
// |                     www.mailcertificado.com                          |
// +----------------------------------------------------------------------+
// |           Copyright (c) 2012 Servicios de Mailcertificado            |
// +----------------------------------------------------------------------+
// | Este programa es software libre. Puede distribuirlo  y/o modificarlo |
// | bajo los términos de la  licencia GNU General Public License  tal  y |
// | como la publica la Fundación de Software Libre, bajo la denominación |
// | GPL, en su versión 2 o posterior (versión inglesa).                  |
// |                                                                      |
// | This program is free software. You can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 or later of the GPL.  |
// +----------------------------------------------------------------------+
// | Autores/Authors:                                                     |
// |		Carlos Mora <ozonosp@gmail.com>       						  |
// |		https://code.google.com/p/jpvalidator/						  |
// +----------------------------------------------------------------------+


//Este archivo contiene las funciones para validación local de campos en javascript
//Cuando se asigna funcion javascript de validación para un campo el sistema buscara en este archivo dicha función
//y la llamará pasándole como parámetros el elemento sobre el que esta el cursor y el idioma.

//Por ejemplo si indica como función de validacion "sample" deberá declarar una función en este archivo con el siguiente formato 
// function sample(element,idioma){ 
//      var valor = $(element).val(); //Obtenemos el valor del elemento mediante jquery
//		if(valor == 'ok') return true; 
//		else if(idioma == 'es') return "El valor no es ok";
//		else return "Value isn't ok";
// }

/**
 * Indica si un numero de dni o cif es correcto
 */
function checkDocumentNumber(element,idioma){
	var value = $(element).val();
	var result = validarDocumento(value);
	var selectId = $(element).attr('selectId'); //Obtenemos el id del select que contiene el tipo de documento
	var selectedoption = $(selectId).find(':selected').val(); //Obtenemos la opción seleccionada
	
	if(result == 1 && selectedoption == 'NIF') return true;
	if(result == 2 && selectedoption == 'CIF') return true;
	if(result == 3 && selectedoption == 'NIE') return true;
	if(selectedoption == 'Passport') return true;
	
	return 'El documento indicado es inválido';
	
}

function checkCaptcha(element,idioma){
	if($("input:focus").attr('name') == $(element).attr('name')) return true;
	var salida = 'Código incorrecto';
	$.ajax({
		type: "GET",
		url: '/libs/checkCaptchaCode.php',
		async: false,
		data: {captcha_code: $(element).val()},
		dataType:"json"
	}).done(function(data){
		if(data.changeimage){
			$('#captcha').attr('src','/securimage/securimage_show.php?' + Math.random());
		}
		if(data.result == true) salida = true;
	}).fail(function(jqXHR, textStatus){ 
		salida = 'Error de formato de checkCaptchaCode';
	});
	return salida;
}

//Validar NIF, CIF, NIE según ley vigente
//Escrito por josep.rosell | Lenguaje JavaScript
//Retorna: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF error, -2 = CIF error, -3 = NIE error, 0 = ??? error
function validarDocumento(a) {

      var temp=a.toUpperCase();
      var cadenadni='TRWAGMYFPDXBNJZSQVHLCKE';


  if (temp!==''){
              //si no tiene un formato valido devuelve error
      if ((!/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(temp) && !/^[T]{1}[A-Z0-9]{8}$/.test(temp)) && !/^[0-9]{8}[A-Z]{1}$/.test(temp)) {
              return 0;
      }

      //comprobacion de NIFs estandar
      if (/^[0-9]{8}[A-Z]{1}$/.test(temp)) {
              posicion = a.substring(8,0) % 23;
              letra = cadenadni.charAt(posicion);
              var letradni=temp.charAt(8);
              if (letra == letradni) {
                      return 1;
              } else {
                      return -1;
              }
      }

      //algoritmo para comprobacion de codigos tipo CIF
      suma = parseInt(a.charAt(2))+parseInt(a.charAt(4))+parseInt(a.charAt(6));
      for (i = 1; i < 8; i += 2) {
              temp1 = 2 * parseInt(a.charAt(i));
              temp1 += '';
              temp1 = temp1.substring(0,1);
              temp2 = 2 * parseInt(a.charAt(i));
              temp2 += '';
              temp2 = temp2.substring(1,2);
              if (temp2 == '') {
                      temp2 = '0';
              }
              suma += (parseInt(temp1) + parseInt(temp2));
      }
      suma += '';
      n = 10 - parseInt(suma.substring(suma.length-1, suma.length));

      //comprobacion de NIFs especiales (se calculan como CIFs)
      if (/^[KLM]{1}/.test(temp)) {
              if (a.charAt(8) == String.fromCharCode(64 + n)) {
                      return 1;
              } else {
                      return -1;
              }
      }

      //comprobacion de CIFs
      if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp)) {
              temp = n + '';
              if (a.charAt(8) == String.fromCharCode(64 + n) || a.charAt(8) == parseInt(temp.substring(temp.length-1, temp.length))) {
                      return 2;
              } else {
                      return -2;
              }
      }


      //comprobacion de NIEs
      if (/^[T]{1}[A-Z0-9]{8}$/.test(temp)) {
              if (a.charAt(8) == /^[T]{1}[A-Z0-9]{8}$/.test(temp)) {
                      return 3;
              } else {
                      return -3;
              }
      }

      //XYZ
      if (/^[XYZ]{1}/.test(temp)) {
		temp = temp.replace('X','0');
		temp = temp.replace('Y','1');
		temp = temp.replace('Z','2');
		pos = temp.substring(0, 8) % 23;
              if (a.charAt(8) == cadenadni.substring(pos, pos + 1)) {
                      return 3;
              } else {
                      return -3;
              }
      }
 }
return 0;
}